// packageOnlineStore/pages/productDetails/productDetails.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    baseUrl:'',//全局连接地址
    quantity:1,
    isSelectProductShow: false, // 控制选择商品框是否显示，初始为false，隐藏状态
    isSelectProductShow1: false, // 控制选择地址框是否显示，初始为false，隐藏状态
    isSelectProductShow2: false, // 控制服务是否显示，初始为false，隐藏状态
    userId:'',//用户id
    addressList:'',//该用户所有地址
    activeAddress:[],//该用户的默认地址
    addressId1:'',//临时选择地址id，不确定不会选择
    addressId:'',//所选地址id
    addressSelect:'',//选择地址名称
    productId:'',//商品id
    productDetails:[],//商品详情
    classId:'',//商品分类id
    typeList:[],//该商品分类的所有规格
    typeId:'',//所选规格id
    typeName:'',//所选规格名称
    productDetails1:[],//该分类的四个商品
    collection:false,//是否收藏
    commentList:[],//获取前两个该商品的评价
    commentCount:'',//该商品评价个数
    goodRate:'',//该商品好评率
    productList:[],//所有商品
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const app = getApp();
    const baseUrl=app.globalConfig.baseUrl //获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const token = wx.getStorageSync('token');
    const productId=options.id
    this.setData({
      userId:app.globalData.userInfo.userId,
      productId:options.id,
      baseUrl:app.globalConfig.baseUrl,
    })
    this.getList([baseUrl,userId,productId]);
    wx.request({
      url: baseUrl+'/product/productDetail/list',
      method:'GET',
      data:{
        pageNum: 1,
        pageSize: 18,
      },
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
        // 遍历商品列表数据
        const newProductDetailList = res.data.rows.map((product) => {
          // 假设价格字段名为price，使用toFixed方法保留两位小数
          product.productPrice = parseFloat(product.productPrice).toFixed(2);
          return product;
        });
        // 用于存储分组后的结果
        const groupedProductLists = [];
        const listLength = newProductDetailList.length;
        let groupCount = Math.min(3, Math.floor(listLength / 6)); // 计算分组数量，最多3组
        for (let i = 0; i < groupCount * 6; i += 6) {
            const group = newProductDetailList.slice(i, i + 6);
            groupedProductLists.push(group);
        }
        this.setData({
            productList: groupedProductLists
        })
      }
    })
  },
  lower(e){
    let quantity1 = this.data.quantity - 1;
    // 确保数量不小于0，可根据实际业务需求调整边界条件
    if (quantity1 < 0) {
        quantity1 = 0;
    }
    this.setData({
        quantity: quantity1
    });
  },
  increase(e){
    let quantity1 = this.data.quantity + 1;
    // 确保数量不小于0，可根据实际业务需求调整边界条件
    if (quantity1 < 0) {
        quantity1 = 0;
    }
    this.setData({
        quantity: quantity1
    });
  },
  // 选择商品的点击事件处理函数
  showSelectProduct(e) {
    this.setData({
        isSelectProductShow: true // 新增一个变量来控制显示隐藏，初始设为false，点击后设为true显示
    });
  },
  //选择商品规格触发函数
  typeChange(e){
    const app = getApp();
    const baseUrl=this.data.baseUrl //获取本地连接地址
    const typeId=e.currentTarget.dataset.id
    const userId=app.globalData.userInfo.userId
    const token = wx.getStorageSync('token');
    this.setData({
      typeId:typeId
    })
    wx.request({
      url: baseUrl+'/product/productType/'+typeId,
      method:'GET',
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
        this.setData({
          typeName:res.data.data.typeName
        })
      },
    })
  },
  // 地址显现的函数
  showSelectProduct1(e) {
    const app = getApp();
    const baseUrl=this.data.baseUrl //获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const token = wx.getStorageSync('token');
     wx.request({
      url: baseUrl+'/product/deliveryAddress/list',
      method:'GET',
      data:{
        userId:this.data.userId
      },
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
        this.setData({
          addressList:res.data.rows
        })
      },
    })
    this.setData({
        isSelectProductShow1: true // 新增一个变量来控制显示隐藏，初始设为false，点击后设为true显示
    });
  },
  //选择地址的触发的函数
  radioChange(e){
    this.setData({
      addressId1: e.detail.value //所选地址id
    });
  },
  showSelectProduct2(e) {
    this.setData({
        isSelectProductShow2: true // 新增一个变量来控制显示隐藏，初始设为false，点击后设为true显示
    });
  },
  close(e){
    this.setData({
      isSelectProductShow:false,
      isSelectProductShow1:false,
      isSelectProductShow2:false,
    })
  },
  goToPay(){
      const quantity = this.data.quantity;
      const productId = this.data.productId;
      const typeId = this.data.typeId;
      const addressId = this.data.addressId;
      const userId = this.data.userId;
      const encodedQuantity = encodeURIComponent(quantity);
      const encodedProductId = encodeURIComponent(productId);
      const encodedTypeId = encodeURIComponent(typeId);
      const encodedAddressId = encodeURIComponent(addressId);
      const encodedUserId = encodeURIComponent(userId);
      const urlWithData = `/packageOnlineStore/pages/confirmOrder/confirmOrder?productNumber=${encodedQuantity}&productId=${encodedProductId}&typeId=${encodedTypeId}&addressId=${encodedAddressId}&userId=${encodedUserId}`;
      wx.navigateTo({
        url: urlWithData
      })
    },
  //跳转到添加新地址页面
  goToAdd(){
    wx.navigateTo({
      url: '/packageOnlineStore/pages/addressManagement/addressManagement',
    })
  },
  //选择地址之后点击确定触发的函数
  choiceOk(){
    const addressId=this.data.addressId1;
    const token = wx.getStorageSync('token');
    this.setData({
      addressId:addressId,
      isSelectProductShow1:false
    })
     const baseUrl=this.data.baseUrl //获取本地连接地址
     wx.request({
      url: baseUrl+'/product/deliveryAddress/'+addressId,
      method:'GET',
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
        this.setData({
          activeAddress:res.data.data
        })
      },
    })
  },
  //根据轮播图跳转到另一个商品详情页
  navigationProduct(e){
    const productId=e.currentTarget.dataset.id
    wx.redirectTo({
      url: '/packageOnlineStore/pages/productDetails/productDetails?id='+productId,
    })
  },
  //添加商品收藏
  addCollect(){
    const app = getApp();
    const baseUrl=this.data.baseUrl //获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const token = wx.getStorageSync('token');
    const productId=this.data.productId
     wx.request({
      url: baseUrl+'/product/productCollect',
      method:'POST',
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      data:{
        userId:userId,
        productId:productId
      },
      success:(res)=>{
        this.getList([baseUrl,userId,productId])
      },
    })
  },
  //取消商品收藏
  cancelCollect(){
    const app = getApp();
    const baseUrl=this.data.baseUrl //获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const token = wx.getStorageSync('token');
    const productId=this.data.productId
     wx.request({
      url: baseUrl+'/product/productCollect/list',
      method:'GET',
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      data:{
        userId:userId,
        productId:productId
      },
      success:(res)=>{
        const collectId=res.data.rows[0].id //获取到的已点赞的商品id
        wx.request({
          url: baseUrl+'/product/productCollect/'+collectId,
          method:'DELETE',
          header:{
            'Authorization': 'Bearer\u0020' + token
          },
          success:(res)=>{
            this.getList([baseUrl,userId,productId])
          },
        })
      },
    })
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },
  //获取商品详情，商品规格，商品规格的第一个
  getList(e){
    const app = getApp();
    const baseUrl=app.globalConfig.baseUrl //获取本地连接地址
    const userId=app.globalData.userInfo.userId
    const token = wx.getStorageSync('token');
    const productId=e[2]
    //根据商品id获取详情
    wx.request({
      url: baseUrl+'/product/productDetail/'+productId,
      method:'GET',
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
        res.data.data.productPrice = res.data.data.productPrice.toFixed(2);
        this.setData({
          productDetails:res.data.data,
          classId:res.data.data.classId
        })
        //获取商品规格
        wx.request({
          url: baseUrl+'/product/productType/list',
          method:'GET',
          data:{
            pageNum:1,
            pageSize:99,
            classId:res.data.data.classId
          },
          header:{
            'Authorization': 'Bearer\u0020' + token
          },
          success:(res1)=>{
            this.setData({
              typeList:res1.data.rows,
              typeId:res1.data.rows[0].id
            })
            wx.request({
              url: baseUrl+'/product/productType/'+res1.data.rows[0].id,
              method:'GET',
              header:{
                'Authorization': 'Bearer\u0020' + token
              },
              success:(res2)=>{
                this.setData({
                  typeName:res2.data.data.typeName
                })
              },
            })
          },
        })
        //该商品所在商品分类的所有商品，截取四个
        wx.request({
          url: baseUrl+'/product/productDetail/list',
          method:'GET',
          data:{
            pageNum:1,
            pageSize:4,
            classId:res.data.data.classId
          },
          header:{
            'Authorization': 'Bearer\u0020' + token
          },
          success:(res)=>{
            this.setData({
              productDetails1:res.data.rows
            })
          },
        })
      },
    })
    //获取用户默认的地址
    wx.request({
      url: baseUrl+'/product/deliveryAddress/list',
      method:'GET',
      data:{
        userId:userId,
        active:0
      },
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
        if(res.data.rows[0]!=null){
          this.setData({
            activeAddress:res.data.rows[0],
            addressId:res.data.rows[0].id
          })
        }else{
          wx.request({
            url: baseUrl+'/product/deliveryAddress/list',
            method:'GET',
            data:{
              userId:userId
            },
            header:{
              'Authorization': 'Bearer\u0020' + token
            },
            success:(res)=>{
              this.setData({
                activeAddress:res.data.rows[0],
                addressId:res.data.rows[0].id
              })
            },
          })
        }
      },
    })
    //查看该用户是否收藏该商品
    wx.request({
      url: baseUrl+'/product/productCollect/list?userId='+userId+'&productId='+productId,
      method:'GET',
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
        if(res.data.rows.length==0){
          this.setData({
            collection:false
          })
        }else{
          this.setData({
            collection:true
          })
        }
      },
    })
    //查看该商品的前两个评价
    wx.request({
      url: baseUrl+'/product/productComment/list',
      method:'GET',
      data:{
        pageNum:1,
        pageSize:2,
        productId:productId,
      },
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
        let productComment = res.data.rows;
        // 遍历课程评价数据列表，为每个评价添加根据评分生成的星星显示逻辑
        productComment.forEach(item => {
            let score = item.productScore;
            let stars = [];
            for (let i = 0; i < 5; i++) {
                if (i < score) {
                    stars.push({ type: 'yellow' }); // 黄色星
                } else {
                    stars.push({ type: 'gray' }); // 灰色星
                }
            }
            item.stars = stars;
        });
        this.setData({
          commentList:res.data.rows,
        })
      },
    })
    //查看该商品的所有评价
    wx.request({
      url: baseUrl+'/product/productComment/list',
      method:'GET',
      data:{
        productId:productId,
      },
      header:{
        'Authorization': 'Bearer\u0020' + token
      },
      success:(res)=>{
        let totalCount = res.data.total;//该商品评价数量
        let commentList =res.data.rows;//所有该商品评价
        let goodCommentCount = 0;//好评数量，初始为0
        commentList.forEach((comment) => {
          if (comment.productScore >= 4) {  // 这里假设大于等于3分为好评，根据实际情况调整条件
            goodCommentCount++;
          }
        });
        let goodRate = commentList.length === 0? 0 : (goodCommentCount / totalCount * 100).toFixed(2);  // 计算好评率并保留两位小数，无评价时设为0
        this.setData({
          commentCount:res.data.total,
          goodRate: goodRate
        })
      },
    })
  }
})